package com.company.common.core.mail;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

public class SimpleMailSender
{
  private final Log log = LogFactory.getLog(SimpleMailSender.class);

  public boolean sendTextMail(MailSenderInfo mailInfo)
  {
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();
    if (mailInfo.isValidate())
    {
      authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
    }

    Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
    try
    {
      MimeMessage mailMessage = new MimeMessage(sendMailSession);

      Address from = new InternetAddress(mailInfo.getFromAddress());

      mailMessage.setFrom(from);

      Address to = new InternetAddress(mailInfo.getToAddress());
      mailMessage.setRecipient(Message.RecipientType.TO, to);

      mailMessage.setSubject(mailInfo.getSubject(), "UTF-8");

      mailMessage.setSentDate(new Date());

      String mailContent = mailInfo.getContent();
      mailMessage.setText(mailContent);

      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      this.log.error(ex, ex);
    }
    return false;
  }

  public boolean sendHtmlMail(MailSenderInfo mailInfo)
  {
    MyAuthenticator authenticator = null;
    Properties pro = mailInfo.getProperties();

    if (mailInfo.isValidate()) {
      authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
    }

    Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
    try
    {
      MimeMessage mailMessage = new MimeMessage(sendMailSession);

      Address from = new InternetAddress(mailInfo.getFromAddress());

      mailMessage.setFrom(from);

      Address to = new InternetAddress(mailInfo.getToAddress());

      mailMessage.setRecipient(Message.RecipientType.TO, to);

      mailMessage.setSubject(mailInfo.getSubject(), "UTF-8");

      mailMessage.setSentDate(new Date());

      Multipart mainPart = new MimeMultipart();

      BodyPart html = new MimeBodyPart();

      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
      mainPart.addBodyPart(html);

      mailMessage.setContent(mainPart);

      Transport.send(mailMessage);
      return true;
    } catch (MessagingException ex) {
      this.log.error(ex, ex);
    }
    return false;
  }
}